package cn.iocoder.yudao.module.erp.service;

import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.category.ErpProductCategoryListReqVO;
import cn.iocoder.yudao.module.erp.controller.admin.product.vo.category.ErpProductCategorySaveReqVO;
import cn.iocoder.yudao.module.erp.controller.app.common.vo.CommonReqVO;
import cn.iocoder.yudao.module.erp.controller.app.product.vo.category.ErpAppProductCategoryList2ReqVO;
import cn.iocoder.yudao.module.erp.controller.app.product.vo.category.ErpAppProductCategoryListReqVO;
import cn.iocoder.yudao.module.erp.controller.app.product.vo.category.ErpProductCategoryPageReqVO;
import cn.iocoder.yudao.module.erp.dal.dataobject.product.ErpProductCategoryDO;
import cn.iocoder.yudao.module.erp.dal.dataobject.stock.ErpWarehouseDO;
import cn.iocoder.yudao.module.erp.dal.mysql.product.ErpProductCategoryMapper;
import cn.iocoder.yudao.module.erp.dal.mysql.stock.ErpWarehouseMapper;
import cn.iocoder.yudao.module.erp.service.product.ErpProductCategoryService;
import cn.iocoder.yudao.module.erp.service.product.ErpProductService;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import java.util.Objects;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;

/**
 * ERP 产品分类 Service 实现类
 *
 * @author 芋道源码
 */
@Service
public class CommonService{

    @Resource
    private ErpProductCategoryMapper erpProductCategoryMapper;

    @Resource
    private ErpWarehouseMapper erpWarehouseMapper;

    public List<ErpProductCategoryDO> productCategoryFirstList(ErpAppProductCategoryListReqVO listReqVO) {
        return erpProductCategoryMapper.selectList(new LambdaQueryWrapperX<ErpProductCategoryDO>()
                .eqIfPresent(ErpProductCategoryDO::getStatus, listReqVO.getStatus())
                .eqIfPresent(ErpProductCategoryDO::getParentId,0L)
        );
    }

    public List<ErpProductCategoryDO> productCategorySecondList(CommonReqVO commonReqVO) {
        return erpProductCategoryMapper.selectList(new LambdaQueryWrapperX<ErpProductCategoryDO>()
                .eq(ErpProductCategoryDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
                .eqIfPresent(ErpProductCategoryDO::getParentId, commonReqVO.getId())
        );    }

    public List<ErpWarehouseDO> warehouseFirstList() {
        return erpWarehouseMapper.selectList(new LambdaQueryWrapperX<ErpWarehouseDO>()
                .eqIfPresent(ErpWarehouseDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
                .eqIfPresent(ErpWarehouseDO::getParentId,0L)
        );
    }

    public List<ErpWarehouseDO> warehouseSecondList(CommonReqVO commonReqVO) {
        return erpWarehouseMapper.selectList(new LambdaQueryWrapperX<ErpWarehouseDO>()
                .eqIfPresent(ErpWarehouseDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
                .eqIfPresent(ErpWarehouseDO::getParentId, commonReqVO.getId())
        );
    }

}
